Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替 | 您所在的位置:网站首页 › LiVeCombined BSubtllls and › Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替 |
Pandas整数和整数数组的加减操作已不再支持时间戳,应使用n * obj.freq代替
在本文中,我们将会介绍Pandas所提供的整数和整数数组与时间戳加减操作的相关知识点,以及其最近不再支持这种加减操作的原因和如何应对。 阅读更多:Pandas 教程 Pandas整数和整数数组在Pandas中,整数和整数数组是经常被使用的一种数据类型。在对整数和整数数组进行加减操作时,Pandas往往支持直接添加或减去一个整数n。例如,我们有如下的Pandas数据,表示了10天的日期: import pandas as pd import numpy as np dates = pd.Series(pd.date_range('2021-01-01', periods=10))我们希望将这些日期向后移动2天,则可以直接使用如下的语句: new_dates = dates + 2这时候,new_dates将会变成这样: 0 2021-01-03 1 2021-01-04 2 2021-01-05 3 2021-01-06 4 2021-01-07 5 2021-01-08 6 2021-01-09 7 2021-01-10 8 2021-01-11 9 2021-01-12 dtype: datetime64[ns]这里,new_dates中的每个日期都向后移动了2天。 Pandas时间戳除了整数和整数数组,Pandas还提供了时间戳的数据类型。时间戳是指某个具体时刻的时间点,可以由Pandas的Timestamp类来表示。我们可以这样来创建一个时间戳: ts = pd.Timestamp('2021-01-01') Pandas整数和整数数组,以及时间戳的加减操作在早期的版本中,Pandas支持直接对整数和整数数组与时间戳进行加减操作。例如,代码如下: dates + ts这样的操作是将每个日期加上时间戳的时间差。例如,假设时间戳为ts = pd.Timestamp('2021-01-01 12:00:00'),则加上ts之后,new_dates将会变成这个样子: 0 2021-01-01 12:00:00 1 2021-01-02 12:00:00 2 2021-01-03 12:00:00 3 2021-01-04 12:00:00 4 2021-01-05 12:00:00 5 2021-01-06 12:00:00 6 2021-01-07 12:00:00 7 2021-01-08 12:00:00 8 2021-01-09 12:00:00 9 2021-01-10 12:00:00 dtype: datetime64[ns]然而,在最近的Pandas版本中,这种加减操作已经不再支持。如果我们按照旧的方式进行加减操作,则会得到一个DeprecationWarning警告。实际运行过程中,可以发现这样的操作将会抛出异常错误,例如: dates + tsTypeError: Addition/subtraction of integers and integer-arrays with Timestamp is no longer supported. Instead of adding/subtracting n, use n * obj.freq 改进的加减操作那么,Pandas要我们如何进行加减操作?Pandas现在推荐我们使用n * obj.freq来替代原来的操作。obj.freq表示时间戳的频率,例如obj.freq = 'D'表示以天为单位进行时间戳加减操作。我们可以这样将上述的加减操作修改为新的方式: new_dates = dates + 2 * pd.offsets.Day()这里,pd.offsets.Day()表示一个时间偏移量,也就是时间间隔为1天的时间差。将2乘以这个时间差,即可得到需要向后移动的总时间差。这个新的操作将会得到与原来相同的结果: 0 2021-01-03 1 2021-01-04 2 2021-01-05 3 2021-01-06 4 2021-01-07 5 2021-01-08 6 2021-01-09 7 2021-01-10 8 2021-01-11 9 2021-01-12 dtype: datetime64[ns]在实际操作中,如果我们需要将时间戳向后或向前移动一个指定的时间间隔,那么按照新的方式应该这样来进行操作: ts_new = ts + 2 * pd.offsets.Day()这样,ts_new将会是原来的时间戳加上2天的时间间隔: Timestamp('2021-01-03 00:00:00') 总结Pandas已经不再支持直接对整数和整数数组进行加减操作,同时也不再支持将时间戳与整数和整数数组进行加减操作。相反,Pandas要求我们使用新的方式,即通过乘以时间间隔的方式,来实现对整数和整数数组,以及时间戳的加减操作。这种方式无疑会更加灵活和方便,能够满足更多的数据处理需求。 |
CopyRight 2018-2019 实验室设备网 版权所有 |